package com.halfsword.creativecraft.entity.villager;

import com.google.common.collect.ImmutableSet;
import com.halfsword.creativecraft.CreativeCraft;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.entity.ai.village.poi.PoiType;
import net.minecraft.world.entity.npc.VillagerProfession;
import net.minecraft.world.level.block.Blocks;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;

/**
 * 村民职业与兴趣点注册器 - DeepSeek 提供核心注释
 *
 * <p>本类负责模组自定义村民职业系统的注册：</p>
 * <ul>
 *   <li>定义新的兴趣点(POI)类型</li>
 *   <li>创建基于POI的村民职业</li>
 *   <li>关联工作站点与职业行为</li>
 * </ul>
 */
public class Villagers {
    // ==================== 注册器初始化 ==================== //
    /** POI类型注册器 - DeepSeek 注释 */
    public static final DeferredRegister<PoiType> POI_TYPES =
            DeferredRegister.create(ForgeRegistries.POI_TYPES, CreativeCraft.MOD_ID);

    /** 村民职业注册器 - DeepSeek 注释 */
    public static final DeferredRegister<VillagerProfession> VILLAGER_PROFESSIONS =
            DeferredRegister.create(ForgeRegistries.VILLAGER_PROFESSIONS, CreativeCraft.MOD_ID);

    // ==================== 兴趣点(POI)注册 ==================== //
    public static final RegistryObject<PoiType> MUSIC_POI = POI_TYPES.register("music_poi",
            () -> new PoiType(ImmutableSet.copyOf(Blocks.NOTE_BLOCK.getStateDefinition().getPossibleStates()), 1, 1)); // 音乐兴趣点 - 使用音符方块作为工作站点 - DeepSeek 注释

    // ==================== 村民职业注册 ==================== //
    public static final RegistryObject<VillagerProfession> MUSICIAN =
            VILLAGER_PROFESSIONS.register("musician",
                    () -> new VillagerProfession(
                            "Musician", // 职业名称
                            holder -> holder.get() == MUSIC_POI.get(), // POI匹配条件
                            holder -> holder.get() == MUSIC_POI.get(), // 工作站点匹配
                            ImmutableSet.of(), // 可交互物品集（空）
                            ImmutableSet.of(), // 可交互方块集（空）
                            SoundEvents.VILLAGER_WORK_ARMORER // 工作音效
                    )); // 音乐家职业 - 在音符方块工作 - DeepSeek 注释

    // ==================== 注册方法 ==================== //
    /**
     * 注册所有村民相关内容到事件总线 - DeepSeek 注释
     *
     * @param eventBus 模组事件总线
     */
    public static void register(IEventBus eventBus) {
        POI_TYPES.register(eventBus); // 注册兴趣点类型
        VILLAGER_PROFESSIONS.register(eventBus); // 注册村民职业
    }
}